#include "encode.h"
/******************************************************
 * 功能：角度编码器读取
 * ***************************************************/
void Read_Encode(Encode_Def_t *handle)
{
	handle->value.encode_value=handle->read_value();
	handle->user_value=(handle->value.encode_value-handle->offset_value)&handle->value.Resolution;
	//handle->user_value=handle->value.encode_value;
}

//编码器功能绑定
void Encoder_Function(Encode_Def_t *handle,Encode_Function read_encode)
{
	handle->read_value=read_encode;
}
/*****************************************************
 * 功能：编码器注册函数
 * 参数：
 *       handle：用户编码器句柄指针
 *       encoder：编码器类型
 *       MI:编码器值是否镜像
 * **************************************************/
void Encoder_Registration(Encode_Def_t *handle,uint8_t EnableMI,uint32_t resolution,uint32_t bits)
{
	handle->value.Bits=bits;
	handle->value.Resolution=resolution;
}
/******************************************************
* 功能：计算编码器差值
* 参数：
*        encode_A:
*        encode_B:
*        encode:编码器参数结构体
* 返回：编码器差值
* 修改记录：
*           2020 08.07    张亚辉    创建函数
******************************************************/
int EncodeDifference(uint32_t encode_A,uint32_t encode_B,Encode_Def_t encode)
{
	int real_err;
	if(encode.encoder_type==Angle_Encode2)
	{
		real_err=((int)encode_A-(int)encode_B);
		if(real_err>(int)encode.value.Resolution/2)
		{
			real_err-=encode.value.Resolution;
		}
		if(real_err<-(int)encode.value.Resolution/2)
		{
			real_err+=encode.value.Resolution;
		}
	}
	else
	{
	  real_err=((encode_A-encode_B)<<((uint8_t)32-encode.value.Bits));
	  real_err=real_err/(int)((0xFFFFFFFF^encode.value.Resolution)>>(encode.value.Bits));
	}
	return real_err;
}

